﻿using DomainModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MusicManager.Interfaces
{
    // HINWEIS: Mit dem Befehl "Umbenennen" im Menü "Umgestalten" können Sie den Schnittstellennamen "IService1" sowohl im Code als auch in der Konfigurationsdatei ändern.
    //[ServiceContract]
    //public interface IMusic
    //{

    //    [OperationContract]
    //    string GetData(int value);

    //    [OperationContract]
    //    CompositeType GetDataUsingDataContract(CompositeType composite);

    //    // TODO: Hier Dienstvorgänge hinzufügen
    //}


    //// Verwenden Sie einen Datenvertrag, wie im folgenden Beispiel dargestellt, um Dienstvorgängen zusammengesetzte Typen hinzuzufügen.
    //[DataContract]
    //public class CompositeType
    //{
    //    bool boolValue = true;
    //    string stringValue = "Hello ";

    //    [DataMember]
    //    public bool BoolValue
    //    {
    //        get { return boolValue; }
    //        set { boolValue = value; }
    //    }

    //    [DataMember]
    //    public string StringValue
    //    {
    //        get { return stringValue; }
    //        set { stringValue = value; }
    //    }
    //}

    [ServiceContract(Namespace="http://MusicManager")]
    public interface IMusic
    {
        //[OperationContract]
        //IEnumerable<Music> FindAll();

        [OperationContract]
        IEnumerable<Music> FindAllForToken(string token);

        [OperationContract]
        Music FindByTokenAndName(string token, string name);

        [OperationContract]
        bool InsertMusic(Music music, string token);
    }

    [ServiceContract(Namespace="http://MusicManager")]
    public interface IUser
    {
        //[OperationContract]
        //User FindByNameAndPassword(string name, string password);

        [OperationContract]
        IEnumerable<User> FindByNameLike(string name);

        [OperationContract]
        IEnumerable<User> FindAll();

        [OperationContract]
        bool InsertUser(User user);

        [OperationContract]
        bool Login(string name, string password, out string token);

        [OperationContract]
        bool Logout(string name, string token);
    }
}
